home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula 2
/
Nebula Two.iso
/
SourceCode
/
Database
/
RandomTableView
/
RandomDataSource.m
< prev
next >
Wrap
Text File
|
1994-04-11
|
3KB
|
128 lines
/* RandomDataSource.m:
* You may freely copy, distribute, and reuse the code in this example.
* NeXT disclaims any warranty of any kind, expressed or implied, as to its
* fitness for any particular use.
*
*
*
*/
#import <appkit/appkit.h>
#import <objc/List.h>
#import "RandomDataSource.h"
#import "StringList.h"
@implementation RandomDataSource
- init
{
[super init];
rowList = [[List alloc] init];
return self;
}
- setRows:(unsigned int) rowCount
{
rows = rowCount;
return self;
}
- setColumns:(unsigned int) columnCount
{
columns = columnCount;
return self;
}
- (unsigned int) rowCount
{
return rows;
}
- (unsigned int) columnCount
{
return columns;
}
- (const char *) getRandomString
{
static const char *text = NULL;
static unsigned int totalSize;
char buffer[100], *buf = buffer;
const char *probe;
if (text == NULL) {
int dummy; /* Not used */
NXStream *stream = NXMapFile ("/usr/dict/words", NX_READONLY);
if (!stream) return ""; /* Shouldn't happen... */
NXGetMemoryBuffer(stream, &text, &totalSize, &dummy);
NXCloseMemory(stream, NX_SAVEBUFFER); /* Free the stream but not the contents */
srandom(time(0)); /* Randomize the random number generator */
}
probe = (char *) (text + random() % (totalSize - 10));
while (*probe++ != '\n');
while (*probe != '\n' && buf - 99 < buffer) *buf++ = *probe++;
*buf = 0;
return NXCopyStringBuffer(buffer);
}
- empty
{
unsigned int maxRow = [rowList count];
unsigned int maxColumn = maxRow > 0 ? [[rowList objectAt:0] count] : 0;
unsigned int i, j;
for (i=0; i < maxRow; i++)
for (j=0; j < maxColumn; j++)
free([[rowList objectAt:i] objectAt:j]);
[rowList freeObjects];
return self;
}
- loadData
{
unsigned int i, j;
[self empty];
for (i=0; i < rows; i++) {
[rowList insertObject:[[StringList alloc] initCount:columns] at:i];
for (j=0; j < columns; j++) {
[[rowList objectAt:i] addString:[self getRandomString] at:j];
}
}
return self;
}
/* This method is called to display the strings in the tableview */
- getValueFor:index at:(unsigned int) aPosition into:aValue
{
[aValue setStringValue:(char *) [[rowList objectAt:aPosition] stringAt:(int) index]];
return self;
}
/* This method is called whenever the string is edited in the tableview */
- setValueFor:index at:(unsigned int) aPosition from:aValue
{
char *string;
string = (char *)[[rowList objectAt:aPosition] removeStringAt:(int) index];
free(string);
string = NXCopyStringBuffer([aValue stringValue]);
[[rowList objectAt:aPosition]
addString:(const char *) string at: (int) index];
return self;
}
@end